package ar.uba.fi.tonyvaliente.tree;

/**
 * Cada referencia guarda un nodo.
 * Se hace esta abstracción para manejar de la misma manera árboles en disco
 * y árboles en memoria.
 * 
 * Cada subclase debe redefinir los métodos get y set para que persistan
 * a los nodos de la manera correspondiente.
 * 
 * @author santiago
 *
 * @param <K> tipo de las claves de los nodos.
 * @param <V> tipo de los valores de los nodos.
 */
public abstract class Reference <K extends Comparable<K>, V> {
	
	/**
	 * Nodo asociado a la referencia.
	 */
	private BPlusTreeNode<K, V> node;
	
	/**
	 * Devuelve el nodo de esta referencia.
	 * @return
	 */
	public abstract BPlusTreeNode<K, V> getNode() throws BPlusTreeException;
	
	/**
	 * Setea el nodo de esta referencia.
	 * @param node
	 */
	public abstract void setNode(BPlusTreeNode<K, V> node) throws BPlusTreeException;
	
	/**
	 * Actualiza el nodo contenido por la referencia.
	 * @throws BPlusTreeException
	 */
	public abstract void updateNode() throws BPlusTreeException;

}
